package Interface;

/**
 * static 关键字:
 *  静态代码块: 当第一次用到本类时，静态代码块执行唯一的一次。
 *  构造代码块:只要调用构造方法创建就会被执行;
 *  static成员变量，变量就是静态变量;静态变量不属于对象,而属于类的(多个对象共享);
 *  static成员方法，就成为了静态方法;静态方法不属于对象，而属于类的
 */
public class Student1 {
    private int id; // 学号
    private String name; // 姓名
    private int age; // 年龄

    //static修饰成员变量
    public static String room; // 教室(属于类的,多个对象共享)
    private static int idCounter = 0; // 学号计数器(属于类的,多个对象共享)


    static {     //静态代码块,只执行一次(优先于构造代码块)
        System.out.println("静态代码块");
    }


    {            //构造代码块,每用调用构造方法都会执行,在构造方法之前调
        System.out.println("我是构造代码块");
    }

    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
        this.id = ++idCounter;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //成员方法
    public void method() {
        System.out.println("成员方法");

        // 成员方法可以访问成员变量
        System.out.println("成员方法-调用成员变量:"+age);
        // 成员方法可以访问静态变量
        System.out.println("成员方法-调用静态成员变量:"+idCounter);
    }

    //静态方法
    public static void methodStatic() {
        System.out.println("静态方法");

        // 静态方法可以访问静态变量
        System.out.println("静态方法-调用静态成员变量:"+idCounter);
        // 静态不能直接访问非静态☆☆重点☆☆
//        System.out.println(age); // 错误写法

        // 静态方法中不能使用this关键字。
//        System.out.println(this); // 错误写法
    }
}
